package main

import (
	"errors"
	"fmt"
	"io/fs"
	"os"
)

func main() {
	//As 在 err 的链中找到与 target 匹配的第一个错误，如果是，则将 target 设置为该错误值并返回 true。 否则，它返回 false。
	//
	//该链由 err 本身和通过重复调用 Unwrap 获得的错误序列组成。
	//
	//如果错误的具体值可分配给目标指向的值，或者错误具有方法 As(interface{}) bool 使得 As(target) 返回 true，则错误与目标匹配。 在后一种情况下，As 方法负责设置目标。
	//
	//错误类型可能提供 As 方法，因此可以将其视为不同的错误类型。
	//
	//如果目标不是指向实现错误的类型或任何接口类型的非空指针，则作为恐慌。

	var pathError *fs.PathError

	_, err := os.Open("jpg")
	if err != nil {
		if errors.As(err, &pathError) {
			fmt.Println("Failed at path:", pathError.Path)
		} else {
			fmt.Print(err)
		}
	}
}
